// 此文件编写和业务无关的工具方法
export function isJSON(str) {
  if (typeof str == 'string') {
    try {
      var obj = JSON.parse(str);
      if (typeof obj == 'object' && obj) {
        return true;
      } else {
        return false;
      }

    } catch (e) {
      console.log('error：' + str + '!!!' + e);
      return false;
    }
  }
}

export function isUndefined(val) {
  return typeof val === 'undefined';
}

export function isObject(obj) {
  return Object.prototype.toString.call(obj) === '[object Object]';
}

function isPromise(obj) {
  return 'function' == typeof obj.then;
}

// 保证fn返回resolve状态
function toResolvedPromise(fn) {
  return new Promise((resolve, reject) => {
    let result = fn();

    // 非promise结果直接返回
    if (!isPromise(result)) {
      console.log('not promise');
      return resolve(result)
    }

    result.then((data) => {
      resolve(data)
    }).catch((err) => {
      console.log('error:', err);
      resolve(null);
    })
  })
}

// 顺序执行promise
export function runPromiseInSequence(promiseArr) {
  const arr = [];
  async function run() {
    for(let p of promiseArr) {
      const val = await toResolvedPromise(p);
      arr.push(val);
    }
    return arr;
  }
  return run();
}

// 是否是手机号
export function isPhone(phoneNum) {
  const reg = /^1[3-9]\d{9}$/g;
  return reg.test(phoneNum);
}

// 分转换为元
export function points2yuanTofixed2(val) {
  if (!val) {
    return 0;
  }
  return (val/100).toFixed(2)
}

// 将对象转为key=value字符串，中间&连接
export function convertObj2Str(obj) {
  if (!obj || !Object.keys(obj).length) {
    return '';
  }
  
  const items = [];
  for(let [key, value] of Object.entries(obj)) {
    items.push(`${key}=${value}`);
  }
  return items.join('&');
}